﻿using Elysium.Demo.Ventas;
using SIIE_ERP.BaseDatos;
using SIIE_ERP.BaseDatos.Inventarios.Catalogos;
using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Elysium.Demo.PuntoVenta.Transacciones
{
    /// <summary>
    /// Lógica de interacción para UserControl_TA1.xaml
    /// </summary>
    public partial class UserControl_TA3 : UserControl
    {
        private UsuarioActivo _sesion;
        private SIIE_ERP.BaseDatos.Configuracion.dbo_Trans_TiempoAire_RFC.ArticulosTA _MiArticulo;

        public UserControl_TA3(ref UsuarioActivo sesion, SIIE_ERP.BaseDatos.Configuracion.dbo_Trans_TiempoAire_RFC.ArticulosTA MiArticulo)
        {
            InitializeComponent();
            this._sesion = sesion;
            this._MiArticulo = MiArticulo;            
        }

        private void Button_Aceptar_Click_1(object sender, RoutedEventArgs e)
        {
            try
            {
                double Aux = Double.Parse(TextBox_Importe.Text, NumberStyles.Currency);
            }
            catch (Exception Ex)
            {
                MessageBox.Show("Favor de ingresar un importe válido");
                return;
            }

            try
            {
                long Aux = Int64.Parse(TextBox_Numero1.Text);
            }
            catch (Exception Ex)
            {
                MessageBox.Show("Favor de ingresar un celular a 10 dígitos válido");
                return;
            }

            if (TextBox_Numero1.Text.Length != 10)
            {
                MessageBox.Show("Favor de ingresar un celular a 10 dígitos válido");
                return;
            }

            if (!TextBox_Numero1.Text.Equals(TextBox_Numero2.Text))
            {
                MessageBox.Show("Los números ingresados no coinciden");
                return;
            }

            if (Double.Parse(TextBox_Importe.Text, NumberStyles.Currency) < _MiArticulo.Monto)
            {
                MessageBox.Show("El importe no es suficiente para hacer la recarga seleccionada, favor de verificar.");
                return;
            }

            double SaldoEmida = 0;
            bool EsTelcel = true;

            if (_MiArticulo.CompaniaCelular == 1)
            {
                SaldoEmida = WebServicesClass.GetSaldo_Telcel(_sesion.RFC);
                EsTelcel = true;
            }
            else
            {
                SaldoEmida = WebServicesClass.GetSaldo_Otros(_sesion.RFC);
                EsTelcel = false;
            }

            if (SaldoEmida < _MiArticulo.Monto)
            {
                MessageBox.Show("No cuenta con fondos en su cuenta de SIE PyMEs para vender tiempo aire.");
                return;
            }

            if(WebServicesClass.RecargaTA(EsTelcel, _sesion.RFC, _MiArticulo.ProductCode, TextBox_Numero1.Text, _MiArticulo.Monto))
            {
                MessageBox.Show("La recarga se ha realizado exitosamente. El cambio del cliente es de " + (Double.Parse(TextBox_Importe.Text, NumberStyles.Currency) - _MiArticulo.Monto).ToString());
                
                //////////////////////// Creación Ticket
                string TicketNo = FuncionesClass.getNewUNID().ToString();

                SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal cat_t = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(_sesion.RFC, _sesion.UserName);
                SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Tickets cat_ticket = new SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Tickets(_sesion.RFC, _sesion.UserName);
                SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_BancoTC cat_TC = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_BancoTC(_sesion.RFC, _sesion.UserName);
                SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Moneda cat_mon = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Moneda(_sesion.RFC, _sesion.UserName);
                SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo cat_art = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);

                int Id_Cuenta;            

                Id_Cuenta = Int32.Parse(cat_t.Get_Terminal_Por_Id(_sesion.PV_Id_Terminal).Rows[0]["Id_CuentaBancaria"].ToString());

                //Movimiento a cuenta
                var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Cuenta_Bancaria(_sesion.RFC, _sesion.UserName);
                db.Update_Saldo_Cuenta_Bancaria_Por_Id(Id_Cuenta, _MiArticulo.Monto);

                int Id_Apertura = Int32.Parse(cat_t.Get_Terminal_Abierta()["Id_Terminal"].ToString());

                int Id_Ticket_Padre = cat_ticket.NextTicket();

                if (cat_ticket.Insert_Ticket_Cab(
                    Id_Ticket_Padre,
                    TicketNo,
                    EstatusDocs_Id.Estatus_Doc_Asentado,
                    Id_Cuenta,
                    Int32.Parse(cat_t.Get_Terminal_Por_Id(_sesion.PV_Id_Terminal).Rows[0]["Id_Almacen"].ToString()),
                    "",
                    _sesion.PV_Id_Terminal,
                    Int32.Parse(cat_mon.Get_Moneda_Por_Nombre("Pesos Mexicanos").Rows[0]["Id_Moneda"].ToString()),
                    Id_Apertura,
                    true,
                    "Ticket de Venta de Tiempo Aire"
                ).Id != 1)
                    MessageBox.Show("ERROR");

                Respuesta r_linea = cat_ticket.Insert_Ticket_Linea(
                    Id_Ticket_Padre,
                    _MiArticulo.Id_Articulo,
                    1,
                    _MiArticulo.Monto,
                    0,
                    0,
                    Math.Round(_MiArticulo.Monto / 1.16, 2),
                    16,
                    (_MiArticulo.Monto - Math.Round(_MiArticulo.Monto / 1.16, 2)),
                    _MiArticulo.Monto
                );
                
                ////////////////////////////   Impresión del Ticket
                PrintDialog dialog = new PrintDialog();

                string s = "";                

                s += FuncionesClass.GetCabeceraTicket(_sesion.RFC, _sesion.UserName, _sesion.PV_Id_Terminal) + "\nTicket No.: " + TicketNo
                        + "\n\n"
                        + "------------------------------"
                        + "\n\n";
                
                s += "1    ";

                s += "RECARGA CEL ";

                s += _MiArticulo.Monto.ToString("C");
                s += "\n";
                
                s += "\n\n";
                s += "Forma de Pago: Efectivo\n";

                s += "Subtotal: " + Math.Round(_MiArticulo.Monto/1.16, 2).ToString("C") + "\n";
                s += "IVA: " + (_MiArticulo.Monto - Math.Round(_MiArticulo.Monto / 1.16, 2)).ToString("C") + "\n";
                s += "Total: " + _MiArticulo.Monto.ToString("C") + "\n";

                var tb = new TextBlock
                {
                    FontFamily = new FontFamily("Consolas"),
                    Text = s
                };

                dialog.PrintVisual(tb, "");

                ///////////////////////////////////

                Window parentWindow = (Window)this.Parent;
                parentWindow.Close();
            }
            else
            {
                MessageBox.Show("El sistema no está disponible en estos momentos.");
            }
        }
    }
}
